package com.github.ruangnazi.sharing

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.ActivityInfo
import android.graphics.Canvas
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import android.view.Menu
import android.view.View
import android.view.animation.AccelerateInterpolator
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.Nullable
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.github.ruangnazi.sharing.adapter.GridImageAdapter
import com.github.ruangnazi.sharing.databinding.ActivityMainBinding
import com.github.ruangnazi.sharing.listener.DragListener
import com.github.ruangnazi.sharing.master.Gundam
import com.google.android.material.navigation.NavigationView
import com.google.android.material.snackbar.Snackbar
import com.luck.picture.lib.PictureSelector
import com.luck.picture.lib.app.PictureAppMaster
import com.luck.picture.lib.broadcast.BroadcastAction
import com.luck.picture.lib.broadcast.BroadcastManager
import com.luck.picture.lib.config.PictureConfig
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.decoration.GridSpacingItemDecoration
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.listener.OnResultCallbackListener
import com.luck.picture.lib.tools.MediaUtils
import com.luck.picture.lib.tools.ScreenUtils
import com.luck.picture.lib.tools.ToastUtils
import java.lang.ref.WeakReference
import java.util.*


class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var binding: ActivityMainBinding
    private lateinit var mAdapter: GridImageAdapter
    private var needScaleBig = true
    private var needScaleSmall = true
    private var maxSelectNum = 8
    private lateinit var mItemTouchHelper: ItemTouchHelper
    private lateinit var mDragListener: DragListener
    private lateinit var tvDeleteText: TextView

    private var isUpward = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)


        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        setSupportActionBar(binding.appBarMain.toolbar)

        binding.appBarMain.fab.setOnClickListener { view ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
        }
        val drawerLayout: DrawerLayout = binding.drawerLayout
        val navView: NavigationView = binding.navView
        val navController = findNavController(R.id.nav_host_fragment_content_main)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow
            ), drawerLayout
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
        Log.e("main","start")
//        Toast.makeText(getApplicationContext(),"===>start!",Toast.LENGTH_SHORT).show();
//         测试代码
//        val gn = Gundam(this@MainActivity)
//        gn.initGrid(this, savedInstanceState, findViewById(R.id.tv_delete_text), findViewById(R.id.recycler),)



//
//        val manager = FullyGridLayoutManager(
//            this,
//            4, GridLayoutManager.VERTICAL, false
//        )
//        val mRecyclerView:RecyclerView = findViewById(R.id.recycler)
//        mRecyclerView.layoutManager = manager
//
//        mRecyclerView.addItemDecoration(
//            GridSpacingItemDecoration(
//                4,
//                ScreenUtils.dip2px(this, 8f), false
//            )
//        )
//        mAdapter = GridImageAdapter(this, onAddPicClickListener)
//        if (savedInstanceState != null && savedInstanceState.getParcelableArrayList<LocalMedia>("selectorList") != null) {
//            mAdapter.setList(
//                savedInstanceState.getParcelableArrayList<LocalMedia>("selectorList")!!.toMutableList())
//        }
//        mAdapter.setSelectMax(maxSelectNum);
//        mRecyclerView.setAdapter(mAdapter);
//
//        mAdapter.setOnItemClickListener { v: View?, position: Int ->
//            val selectList: List<LocalMedia> = mAdapter.data
//            if (selectList.size > 0) {
//                val media = selectList[position]
//                val mimeType = media.mimeType
//                val mediaType = PictureMimeType.getMimeType(mimeType)
//                when (mediaType) {
//                    PictureConfig.TYPE_VIDEO ->                         // 预览视频
//                        PictureSelector.create(this@MainActivity)
//                            .themeStyle(R.style.picture_default_style)
////                            .setPictureStyle(mPictureParameterStyle) // 动态自定义相册主题
//                            .externalPictureVideo(if (TextUtils.isEmpty(media.androidQToPath)) media.path else media.androidQToPath)
//                    PictureConfig.TYPE_AUDIO ->                         // 预览音频
//                        PictureSelector.create(this@MainActivity)
//                            .externalPictureAudio(if (PictureMimeType.isContent(media.path)) media.androidQToPath else media.path)
//                    else ->                         // 预览图片 可自定长按保存路径
////                        PictureWindowAnimationStyle animationStyle = new PictureWindowAnimationStyle();
////                        animationStyle.activityPreviewEnterAnimation = R.anim.picture_anim_up_in;
////                        animationStyle.activityPreviewExitAnimation = R.anim.picture_anim_down_out;
//                        PictureSelector.create(this@MainActivity)
//                            .themeStyle(R.style.picture_default_style) // xml设置主题
////                            .setPictureStyle(mPictureParameterStyle) // 动态自定义相册主题
//                            //.setPictureWindowAnimationStyle(animationStyle)// 自定义页面启动动画
//                            .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) // 设置相册Activity方向，不设置默认使用系统
//                            .isNotPreviewDownload(true) // 预览图片长按是否可以下载
//                            //.bindCustomPlayVideoCallback(new MyVideoSelectedPlayCallback(getContext()))// 自定义播放回调控制，用户可以使用自己的视频播放界面
//                            .imageEngine(GlideEngine.createGlideEngine()) // 外部传入图片加载引擎，必传项
//                            .openExternalPreview(position, selectList)
//                }
//            }
//        }
//
//        mAdapter.setItemLongClickListener { holder: RecyclerView.ViewHolder, position: Int, v: View? ->
//            //如果item不是最后一个，则执行拖拽
//            needScaleBig = true
//            needScaleSmall = true
//            val size = mAdapter.data.size
//            if (size != maxSelectNum) {
//                mItemTouchHelper.startDrag(holder)
//                return@setItemLongClickListener
//            }
//            if (holder.layoutPosition != size - 1) {
//                mItemTouchHelper.startDrag(holder)
//            }
//        }
//
//        mDragListener = object : DragListener {
//            override fun deleteState(isDelete: Boolean) {
//                if (isDelete) {
//                    tvDeleteText.setText(getString(R.string.app_let_go_drag_delete))
//                    tvDeleteText.setCompoundDrawablesRelativeWithIntrinsicBounds(
//                        0,
//                        R.drawable.ic_let_go_delete,
//                        0,
//                        0
//                    )
//                } else {
//                    tvDeleteText.setText(getString(R.string.app_drag_delete))
//                    tvDeleteText.setCompoundDrawablesRelativeWithIntrinsicBounds(
//                        0,
//                        R.drawable.picture_icon_delete,
//                        0,
//                        0
//                    )
//                }
//            }
//
//            override fun dragState(isStart: Boolean) {
//                val visibility: Int = tvDeleteText.getVisibility()
//                if (isStart) {
//                    if (visibility == View.GONE) {
//                        tvDeleteText.animate().alpha(1F).setDuration(300)
//                            .setInterpolator(AccelerateInterpolator())
//                        tvDeleteText.setVisibility(View.VISIBLE)
//                    }
//                } else {
//                    if (visibility == View.VISIBLE) {
//                        tvDeleteText.animate().alpha(0F).setDuration(300)
//                            .setInterpolator(AccelerateInterpolator())
//                        tvDeleteText.setVisibility(View.GONE)
//                    }
//                }
//            }
//        }
//
//        mItemTouchHelper = ItemTouchHelper(object : ItemTouchHelper.Callback() {
//            override fun isLongPressDragEnabled(): Boolean {
//                return true
//            }
//
//            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
//            override fun getMovementFlags(
//                recyclerView: RecyclerView,
//                viewHolder: RecyclerView.ViewHolder
//            ): Int {
//                val itemViewType = viewHolder.itemViewType
//                if (itemViewType != GridImageAdapter.TYPE_CAMERA) {
//                    viewHolder.itemView.alpha = 0.7f
//                }
//                return makeMovementFlags(
//                    ItemTouchHelper.DOWN or ItemTouchHelper.UP
//                            or ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT, 0
//                )
//            }
//
//            override fun onMove(
//                recyclerView: RecyclerView,
//                viewHolder: RecyclerView.ViewHolder,
//                target: RecyclerView.ViewHolder
//            ): Boolean {
//                //得到item原来的position
//                try {
//                    val fromPosition = viewHolder.adapterPosition
//                    //得到目标position
//                    val toPosition = target.adapterPosition
//                    val itemViewType = target.itemViewType
//                    if (itemViewType != GridImageAdapter.TYPE_CAMERA) {
//                        if (fromPosition < toPosition) {
//                            for (i in fromPosition until toPosition) {
//                                Collections.swap(mAdapter.data, i, i + 1)
//                            }
//                        } else {
//                            for (i in fromPosition downTo toPosition + 1) {
//                                Collections.swap(mAdapter.data, i, i - 1)
//                            }
//                        }
//                        mAdapter.notifyItemMoved(fromPosition, toPosition)
//                    }
//                } catch (e: Exception) {
//                    e.printStackTrace()
//                }
//                return true
//            }
//
//            override fun onChildDraw(
//                c: Canvas,
//                recyclerView: RecyclerView,
//                viewHolder: RecyclerView.ViewHolder,
//                dX: Float,
//                dY: Float,
//                actionState: Int,
//                isCurrentlyActive: Boolean
//            ) {
//                val itemViewType = viewHolder.itemViewType
//                if (itemViewType != GridImageAdapter.TYPE_CAMERA) {
//                    if (null == mDragListener) {
//                        return
//                    }
//                    if (needScaleBig) {
//                        //如果需要执行放大动画
//                        viewHolder.itemView.animate().scaleXBy(0.1f).scaleYBy(0.1f).duration = 100
//                        //执行完成放大动画,标记改掉
//                        needScaleBig = false
//                        //默认不需要执行缩小动画，当执行完成放大 并且松手后才允许执行
//                        needScaleSmall = false
//                    }
//                    val sh: Int = recyclerView.height + tvDeleteText.getHeight()
//                    val ry: Int = tvDeleteText.getBottom() - sh
//                    if (dY >= ry) {
//                        //拖到删除处
//                        mDragListener.deleteState(true)
//                        if (isUpward) {
//                            //在删除处放手，则删除item
//                            viewHolder.itemView.visibility = View.INVISIBLE
//                            mAdapter.delete(viewHolder.adapterPosition)
//                            resetState()
//                            return
//                        }
//                    } else { //没有到删除处
//                        if (View.INVISIBLE === viewHolder.itemView.visibility) {
//                            //如果viewHolder不可见，则表示用户放手，重置删除区域状态
//                            mDragListener.dragState(false)
//                        }
//                        if (needScaleSmall) { //需要松手后才能执行
//                            viewHolder.itemView.animate().scaleXBy(1f).scaleYBy(1f).duration = 100
//                        }
//                        mDragListener.deleteState(false)
//                    }
//                    super.onChildDraw(
//                        c,
//                        recyclerView,
//                        viewHolder,
//                        dX,
//                        dY,
//                        actionState,
//                        isCurrentlyActive
//                    )
//                }
//            }
//
//            override fun onSelectedChanged(
//                @Nullable viewHolder: RecyclerView.ViewHolder?,
//                actionState: Int
//            ) {
//                val itemViewType = viewHolder?.itemViewType ?: GridImageAdapter.TYPE_CAMERA
//                if (itemViewType != GridImageAdapter.TYPE_CAMERA) {
//                    if (ItemTouchHelper.ACTION_STATE_DRAG == actionState && mDragListener != null) {
//                        mDragListener.dragState(true)
//                    }
//                    super.onSelectedChanged(viewHolder, actionState)
//                }
//            }
//
//            override fun getAnimationDuration(
//                recyclerView: RecyclerView,
//                animationType: Int,
//                animateDx: Float,
//                animateDy: Float
//            ): Long {
//                needScaleSmall = true
//                isUpward = true
//                return super.getAnimationDuration(recyclerView, animationType, animateDx, animateDy)
//            }
//
//            override fun clearView(
//                recyclerView: RecyclerView,
//                viewHolder: RecyclerView.ViewHolder
//            ) {
//                val itemViewType = viewHolder.itemViewType
//                if (itemViewType != GridImageAdapter.TYPE_CAMERA) {
//                    viewHolder.itemView.alpha = 1.0f
//                    super.clearView(recyclerView, viewHolder)
//                    mAdapter.notifyDataSetChanged()
//                    resetState()
//                }
//            }
//        })
//
//        // 绑定拖拽事件
//
//        // 绑定拖拽事件
//        mItemTouchHelper.attachToRecyclerView(mRecyclerView)
//
//        // 注册广播
//
//        // 注册广播
//        BroadcastManager.getInstance(getContext()).registerReceiver(
//            broadcastReceiver,
//            BroadcastAction.ACTION_DELETE_PREVIEW_POSITION
//        )

    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment_content_main)
        return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
    }

    private val onAddPicClickListener: GridImageAdapter.onAddPicClickListener = object :
        GridImageAdapter.onAddPicClickListener {
        override fun onAddPicClick() {

                // 进入相册 以下是例子：不需要的api可以不写
                PictureSelector.create(this@MainActivity)
                    .openGallery(PictureMimeType.ofImage()) // 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
                    .imageEngine(GlideEngine.createGlideEngine()) // 外部传入图片加载引擎，必传项
                    //.theme(themeId)// 主题样式设置 具体参考 values/styles   用法：R.style.picture.white.style v2.3.3后 建议使用setPictureStyle()动态方式
//                    .setPictureUIStyle(mSelectorUIStyle) //.setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题
                    //.setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题
//                    .setPictureWindowAnimationStyle(mWindowAnimationStyle) // 自定义相册启动退出动画
                    .isWeChatStyle(true) // 是否开启微信图片选择风格
//                    .isUseCustomCamera(cb_custom_camera.isChecked()) // 是否使用自定义相机
//                    .setLanguage(language) // 设置语言，默认中文
//                    .isPageStrategy(cbPage.isChecked()) // 是否开启分页策略 & 每页多少条；默认开启
//                    .setRecyclerAnimationMode(animationMode) // 列表动画效果
                    .isWithVideoImage(true) // 图片和视频是否可以同选,只在ofAll模式下有效
                    //.isSyncCover(true)// 是否强制从MediaStore里同步相册封面，如果相册封面没显示异常则没必要设置
                    //.isCameraAroundState(false) // 是否开启前置摄像头，默认false，如果使用系统拍照 可能部分机型会有兼容性问题
                    //.isCameraRotateImage(false) // 拍照图片旋转是否自动纠正
                    //.isAutoRotating(false)// 压缩时自动纠正有旋转的图片
                    .isMaxSelectEnabledMask(true) // 选择数到了最大阀值列表是否启用蒙层效果
                    //.isAutomaticTitleRecyclerTop(false)// 连续点击标题栏RecyclerView是否自动回到顶部,默认true
                    //.loadCacheResourcesCallback(GlideCacheEngine.createCacheEngine())// 获取图片资源缓存，主要是解决华为10部分机型在拷贝文件过多时会出现卡的问题，这里可以判断只在会出现一直转圈问题机型上使用
                    //.setOutputCameraPath(createCustomCameraOutPath())// 自定义相机输出目录
                    //.setButtonFeatures(CustomCameraView.BUTTON_STATE_BOTH)// 设置自定义相机按钮状态
                    .setCaptureLoadingColor(
                        ContextCompat.getColor(
                            this@MainActivity,
                            R.color.app_color_blue
                        )
                    )
                    .maxSelectNum(maxSelectNum) // 最大图片选择数量
                    .minSelectNum(1) // 最小选择数量
                    .maxVideoSelectNum(1) // 视频最大选择数量
                    //.minVideoSelectNum(1)// 视频最小选择数量
                    //.closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q())// 关闭在AndroidQ下获取图片或视频宽高相反自动转换
                    .imageSpanCount(4) // 每行显示个数
                    //.queryFileSize() // 过滤最大资源,已废弃
                    //.filterMinFileSize(5)// 过滤最小资源，单位kb
                    //.filterMaxFileSize()// 过滤最大资源，单位kb
                    .isReturnEmpty(false) // 未选择数据时点击按钮是否可以返回
//                    .closeAndroidQChangeWH(true) //如果图片有旋转角度则对换宽高,默认为true
//                    .closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q()) // 如果视频有旋转角度则对换宽高,默认为false
                    .isAndroidQTransform(true) // 是否需要处理Android Q 拷贝至应用沙盒的操作，只针对compress(false); && .isEnableCrop(false);有效,默认处理
                    .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) // 设置相册Activity方向，不设置默认使用系统
                    .isOriginalImageControl(true) // 是否显示原图控制按钮，如果设置为true则用户可以自由选择是否使用原图，压缩、裁剪功能将会失效
                    //.isAutoScalePreviewImage(true)// 如果图片宽度不能充满屏幕则自动处理成充满模式
                    //.bindCustomPlayVideoCallback(new MyVideoSelectedPlayCallback(getContext()))// 自定义视频播放回调控制，用户可以使用自己的视频播放界面
                    //.bindCustomPreviewCallback(new MyCustomPreviewInterfaceListener())// 自定义图片预览回调接口
                    //.bindCustomCameraInterfaceListener(new MyCustomCameraInterfaceListener())// 提供给用户的一些额外的自定义操作回调
                    //.bindCustomPermissionsObtainListener(new MyPermissionsObtainCallback())// 自定义权限拦截
                    //.bindCustomChooseLimitListener(new MyChooseLimitCallback()) // 自定义选择限制条件Dialog
                    //.cameraFileName(System.currentTimeMillis() +".jpg")    // 重命名拍照文件名、如果是相册拍照则内部会自动拼上当前时间戳防止重复，注意这个只在使用相机时可以使用，如果使用相机又开启了压缩或裁剪 需要配合压缩和裁剪文件名api
                    //.renameCompressFile(System.currentTimeMillis() +".jpg")// 重命名压缩文件名、 如果是多张压缩则内部会自动拼上当前时间戳防止重复
                    //.renameCropFileName(System.currentTimeMillis() + ".jpg")// 重命名裁剪文件名、 如果是多张裁剪则内部会自动拼上当前时间戳防止重复
                    .selectionMode(PictureConfig.MULTIPLE ) // 多选 or 单选
//                    .isSingleDirectReturn(cb_single_back.isChecked()) // 单选模式下是否直接返回，PictureConfig.SINGLE模式下有效
                    .isPreviewImage(true) // 是否可预览图片
                    .isPreviewVideo(true) // 是否可预览视频
                    //.querySpecifiedFormatSuffix(PictureMimeType.ofJPEG())// 查询指定后缀格式资源
                    //.queryMimeTypeConditions(PictureMimeType.ofWEBP())
//                    .isEnablePreviewAudio(cb_preview_audio.isChecked()) // 是否可播放音频
                    .isCamera(true) // 是否显示拍照按钮
                    //.isMultipleSkipCrop(false)// 多图裁剪时是否支持跳过，默认支持
                    //.isMultipleRecyclerAnimation(false)// 多图裁剪底部列表显示动画效果
                    .isZoomAnim(true) // 图片列表点击 缩放效果 默认true
                    //.imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg,Android Q使用PictureMimeType.PNG_Q
                    .isEnableCrop(false) // 是否裁剪
                    //.basicUCropConfig()//对外提供所有UCropOptions参数配制，但如果PictureSelector原本支持设置的还是会使用原有的设置
                    .isCompress(false) // 是否压缩
                    //.compressFocusAlpha(true)// 压缩时是否开启透明通道
                    //.compressEngine(ImageCompressEngine.createCompressEngine()) // 自定义压缩引擎
                    //.compressQuality(80)// 图片压缩后输出质量 0~ 100
                    .synOrAsy(false) //同步true或异步false 压缩 默认同步
                    //.queryMaxFileSize(10)// 只查多少M以内的图片、视频、音频  单位M
                    //.compressSavePath(getPath())//压缩图片保存地址
                    //.sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效 注：已废弃
                    //.glideOverride(160, 160)// glide 加载宽高，越小图片列表越流畅，但会影响列表图片浏览的清晰度 注：已废弃
//                    .withAspectRatio(aspect_ratio_x, aspect_ratio_y) // 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
                    .hideBottomControls(true) // 是否显示uCrop工具栏，默认不显示
//                    .isGif(cb_isGif.isChecked()) // 是否显示gif图片
                    //.isWebp(false)// 是否显示webp图片,默认显示
                    //.isBmp(false)//是否显示bmp图片,默认显示
//                    .freeStyleCropEnabled(cb_styleCrop.isChecked()) // 裁剪框是否可拖拽
//                    .circleDimmedLayer(cb_crop_circular.isChecked()) // 是否圆形裁剪
                    //.setCropDimmedColor(ContextCompat.getColor(getContext(), R.color.app_color_white))// 设置裁剪背景色值
                    //.setCircleDimmedBorderColor(ContextCompat.getColor(getApplicationContext(), R.color.app_color_white))// 设置圆形裁剪边框色值
                    //.setCircleStrokeWidth(3)// 设置圆形裁剪边框粗细
//                    .showCropFrame(cb_showCropFrame.isChecked()) // 是否显示裁剪矩形边框 圆形裁剪时建议设为false
//                    .showCropGrid(cb_showCropGrid.isChecked()) // 是否显示裁剪矩形网格 圆形裁剪时建议设为false
                    .isOpenClickSound(false) // 是否开启点击声音
                    .selectionData(mAdapter.data) // 是否传入已选图片
                    //.isDragFrame(false)// 是否可拖动裁剪框(固定)
                    //.videoMinSecond(10)// 查询多少秒以内的视频
                    //.videoMaxSecond(15)// 查询多少秒以内的视频
                    //.recordVideoSecond(10)//录制视频秒数 默认60s
                    //.isPreviewEggs(true)// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中)
                    //.cropCompressQuality(90)// 注：已废弃 改用cutOutQuality()
                    .cutOutQuality(90) // 裁剪输出质量 默认100
                    //.cutCompressFormat(Bitmap.CompressFormat.PNG.name())//裁剪图片输出Format格式，默认JPEG
                    .minimumCompressSize(100) // 小于多少kb的图片不压缩
                    //.cropWH()// 裁剪宽高比，设置如果大于图片本身宽高则无效
                    //.cropImageWideHigh()// 裁剪宽高比，设置如果大于图片本身宽高则无效
                    //.rotateEnabled(false) // 裁剪是否可旋转图片
                    //.scaleEnabled(false)// 裁剪是否可放大缩小图片
                    //.videoQuality()// 视频录制质量 0 or 1
                    //.forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code
                    .forResult(MyResultCallback(mAdapter))

        }
    }

    /**
     * 返回结果回调
     */
    private class MyResultCallback(adapter: GridImageAdapter?) :
        OnResultCallbackListener<LocalMedia> {
        private val mAdapterWeakReference: WeakReference<GridImageAdapter>
        override fun onResult(result: MutableList<LocalMedia>) {
            for (media in result) {
                if (media.width == 0 || media.height == 0) {
                    if (PictureMimeType.isHasImage(media.mimeType)) {
                        val imageExtraInfo = MediaUtils.getImageSize(media.path)
                        media.width = imageExtraInfo.width
                        media.height = imageExtraInfo.height
                    } else if (PictureMimeType.isHasVideo(media.mimeType)) {
                        val videoExtraInfo = MediaUtils.getVideoSize(
                            PictureAppMaster.getInstance().appContext,
                            media.path
                        )
                        media.width = videoExtraInfo.width
                        media.height = videoExtraInfo.height
                    }
                }

                println ( "文件名: " + media.fileName)
                println ( "是否压缩:" + media.isCompressed)
                println ( "压缩:" + media.compressPath)
                println ( "原图:" + media.path)
                println ( "绝对路径:" + media.realPath)
                println ( "是否裁剪:" + media.isCut)
                println ( "裁剪:" + media.cutPath)
                println ( "是否开启原图:" + media.isOriginal)
                println ( "原图路径:" + media.originalPath)
                println ( "Android Q 特有Path:" + media.androidQToPath)
                println ( "宽高: " + media.width + "x" + media.height)
                println ( "Size: " + media.size)
                println ( "onResult: $media")

                // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息，如旋转角度、经纬度等信息
            }
            if (mAdapterWeakReference.get() != null) {
                mAdapterWeakReference.get()!!.setList(result)
                mAdapterWeakReference.get()!!.notifyDataSetChanged()
            }
        }

        override fun onCancel() {
           println("PictureSelector Cancel")
        }

        init {
            mAdapterWeakReference = WeakReference(adapter)
        }
    }

    /**
     * 重置
     */
    private fun resetState() {
        if (mDragListener != null) {
            mDragListener.deleteState(false)
            mDragListener.dragState(false)
        }
        isUpward = false
    }

    fun getContext(): Context? {
        return this
    }

    private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val action = intent.action
            if (TextUtils.isEmpty(action)) {
                return
            }
            if (BroadcastAction.ACTION_DELETE_PREVIEW_POSITION == action) {
                // 外部预览删除按钮回调
                val extras = intent.extras
                if (extras != null) {
                    val position = extras.getInt(PictureConfig.EXTRA_PREVIEW_DELETE_POSITION)
                    ToastUtils.s(getContext(), "delete image index:$position")
                    mAdapter.remove(position)
                    mAdapter.notifyItemRemoved(position)
                }
            }
        }
    }
}